#include <iostream>
#include <sys/types.h>
#include <unistd.h>
#include <cstring>
#include <cstdlib>
#include <stdio.h>
#include <cerrno>
#include <sys/stat.h>
#include <fcntl.h>
// 先创建管道， 进而创建子进程， 父子进程使用管道进行通信
// 父进程向管道当中写“i am father”，
// 子进程从管道当中读出内容, 并且打印到标准输出
// int main()
// {
//     int fds[2];
//     char str[200]={0};//memset(str,0,sizeof(str));等价

//     if(pipe(fds)<0)
//     {
//         perror("pipe fault");
//         exit(1);
//     }

//     while(fgets(str,200,stdin))//fgets 返回值是字符串指针，fgetc返回值是？
//     {
//         int len=strlen(str);
//         if(write(fds[1],str,len)!=len)//read 是读fd，write是写fd。如果没错写多长和返回值应该是相等的。
//         {
//             perror("write fault");
//             exit(2);
//         }
//         //str[0]='\0';//也是清空
//         memset(str,0,sizeof(str));

//         if(read(fds[0],str,200)==-1)//把fd的内容读到str里
//         {
//             perror("read fault");
//             exit(3);
//         }

//         if(write(1,str,strlen(str))!=strlen(str))
//         {
//             perror("write to stdout fault");
//             exit(4);
//         }
//     }

//     return 0;
// }

// int main(int argc,char *argv[])
// {
//     int fds[2];
//     char str[200]={0};//memset(str,0,sizeof(str));等价

//     if(pipe(fds)<0)
//     {
//         perror("pipe fault");
//         exit(1);
//     }
//     pid_t pid=fork();
//     if(pid==-1)
//     {
//         perror("fork error");
//         return 1;
//     }
//     if(pid==0)//子进程进行读
//     {
//         close(fds[1]);
//         read(fds[0],str,sizeof(str));
//         printf("子进程读取：%s\n",str);
//         close(fds[0]);
//         return 0;
//     }

//     close(fds[0]);//父进程进行写
//     str[0]='\0';
//     fgets(str,200,stdin);
//     write(fds[1],str,strlen(str));
//     close(fds[1]);
//     return 0;
// }

// 创建出来的命名管道可以供两个进程通信
// 进程A 向管道当中写 “i am process A”
// 进程B 从管道当中读 并且打印到标准输出

// int main(int argc, char *argv[])
// {
//     int outfd;
//     outfd = open("abc.bak", O_WRONLY | O_CREAT | O_TRUNC, 0644);
//     if (outfd == -1)
//     {
//         perror("outfd fault");
//         exit(1);
//     }
//     int infd;
//     infd = open("bite", O_RDONLY);
//     if (infd == -1)
//     {
//         perror("infd fault");
//         exit(1);
//     }
//     char buf[1024];
//     int n;
//     while ((n = read(infd, buf, 1024)) > 0)
//     {
//         write(outfd, buf, n);
//         write(stdout, buf, n);
//     }
//     close(infd);
//     close(outfd);
//     unlink("tp");
//     return 0;
// }
